package cxydmmszl.tmp.t2.middle;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;

/**
 * <li style="color: red;">Prob</li>
 * 分糖果问题进阶
 * <li style="color: green;">Desc</li>
 * 一群孩子做游戏，现在请你根据游戏得分来发糖果，要求如下：<br/>
 * 1. 每个孩子不管得分多少，起码分到一个糖果。<br/>
 * 2. 任意两个相邻的孩子之间，得分较多的孩子必须拿多一些糖果。<br/>
 * 3. 任意两个相邻的孩子之间的得分如果一样多，糖果数必须相同<br/>
 * 给定一个数组arr代表得分数组，请返回最少需要多少糖果。
 * <li style="color: green;">Input</li>
 * 第一行一个整数N表示数组大小<br/>
 * 接下来一行N个整数表示数组内的元素
 * <li style="color: green;">Output</li>
 * 输出一个整数表示答案
 * <li style="color: blue;">Link</li> CD78
 *
 * @author habitplus
 * @since 2021-11-02 11:49
 */
public class Main {
    static final StreamTokenizer st =
            new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));

    static int nextInt() {
        try {
            st.nextToken();
        } catch (IOException e) {
            throw new RuntimeException("Input is invalid!");
        }
        return (int) st.nval;
    }

    public static void main(String[] args) {
        int n = nextInt();
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = nextInt();
        }

        int ans = divideCandy(arr);
        System.out.println(ans);
    }

    private static int divideCandy(int[] arr) {
        if (arr == null || arr.length < 1) {
            return 0;
        }

        int[] res = new int[arr.length];
        res[0] = 1;
        int sum = 0;

        // 从左到右找最佳方案
        for (int i = 1; i < arr.length; ++i) {
            res[i] = 1;
            if (arr[i] > arr[i - 1]) res[i] = res[i - 1] + 1;
            if (arr[i] == arr[i - 1]) res[i] = res[i-1];
        }
        // 在上一回合的基础上，在判断从右向左找最佳方案
        for (int i = arr.length - 2; i >= 0; --i) {
            if (arr[i] > arr[i + 1]) res[i] = Math.max(res[i], res[i + 1] + 1);
            if (arr[i] == arr[i + 1]) res[i] = res[i+1];
        }

        for (int x : res) sum += x;

        return sum;
    }
}
